package org.edu.modules.act.service;

import org.edu.modules.act.entity.Leave;
import org.springframework.web.multipart.MultipartFile;

import java.io.InputStream;
import java.util.Map;

/**
 * 流程信息的业务逻辑接口层
 *
 * @版权所有 福州土著人信息科技有限公司
 */
public interface ProcessService {

	/**
	 * 查询流程定义分页
	 *
	 * @param currentPage           当前页数
	 * @param pageSize              每页记录数
	 * @param processDefinitionName 流程定义名称
	 * @return
	 */
	Map<String, Object> queryProcessDefinition(Integer currentPage, Integer pageSize, String processDefinitionName);

	/**
	 * 查询流程实例分页
	 *
	 * @param currentPage         当前页数
	 * @param pageSize            每页记录数
	 * @param processInstanceName 流程实例名称
	 * @return
	 */
	Map<String, Object> queryProcessInstance(Integer currentPage, Integer pageSize, String processInstanceName);

	/**
	 * 查询流程实例执行路径分页
	 *
	 * @param currentPage       当前页数
	 * @param pageSize          每页记录数
	 * @param processInstanceId 流程实例ID
	 * @return
	 */
	Map<String, Object> queryExecution(Integer currentPage, Integer pageSize, String processInstanceId);

	/**
	 * 获取流程定义XML
	 *
	 * @param deploymentId 部署ID
	 * @return
	 */
	String getProcessResource(String deploymentId);

	/**
	 * 获取高亮跟踪流程图
	 *
	 * @param processInstanceId 流程实例ID
	 * @return
	 */
	String getHighLightedProcessDiagram(String processInstanceId);

	/**
	 * 获取流程定义图片
	 *
	 * @param deploymentId 部署ID
	 * @return
	 */
	InputStream getProcessImage(String deploymentId);

	/**
	 * 持久化流程
	 *
	 * @param modelId 模型ID
	 * @param jsonXml 流程基本信息
	 * @param svgXml  流程设计信息
	 */
	void persistProcess(String modelId, String jsonXml, String svgXml);

	/**
	 * 发起流程
	 *
	 * @param leave       请假对象
	 * @param starterUser 发起者
	 */
	void startProcessInstance(Leave leave, String starterUser,String userName,String fileId);

	/**
	 * 挂起流程定义
	 *
	 * @param processDefinitionId 流程定义ID
	 */
	void suspendProcessDefinition(String processDefinitionId);

	/**
	 * 激活流程定义
	 *
	 * @param processDefinitionId 流程定义ID
	 */
	void activateProcessDefinition(String processDefinitionId);

	/**
	 * 挂起流程实例
	 *
	 * @param processInstanceId 流程实例ID
	 */
	void suspendProcessInstance(String processInstanceId);

	/**
	 * 激活流程实例
	 *
	 * @param processInstanceId 流程实例ID
	 */
	void activateProcessInstance(String processInstanceId);

	/**
	 * 删除流程实例
	 *
	 * @param processInstanceId 流程实例ID
	 */
	void deleteProcessInstance(String processInstanceId);

	/**
	 * 上传表单模板文件
	 * @param file
	 * @param processInstanceId
	 * @param processInstanceKey
	 * @return
	 */
//	String uploadFile(MultipartFile file, String processInstanceId, String processInstanceKey) throws Exception;

}
